package com.ruoyi.project.system.service.impl;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import com.ruoyi.project.system.domain.SysRoleStore;
import com.ruoyi.project.system.domain.SysUserStore;
import com.ruoyi.project.system.domain.vo.StoreVo;
import com.ruoyi.project.system.mapper.SysRoleStoreMapper;
import com.ruoyi.project.system.mapper.SysUserStoreMapper;
import org.apache.velocity.runtime.directive.Foreach;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.project.system.mapper.SysStoreMapper;
import com.ruoyi.project.system.domain.SysStore;
import com.ruoyi.project.system.service.ISysStoreService;

/**
 * 店仓档案Service业务层处理
 * 
 * @author anan
 * @date 2021-03-02
 */
@Service
public class SysStoreServiceImpl implements ISysStoreService 
{
    @Autowired
    private SysStoreMapper storeMapper;

    @Autowired
    private SysRoleStoreMapper roleStoreMapper;

    @Autowired
    private SysUserStoreMapper userStoreMapper;

    /**
     * 查询店仓档案
     * 
     * @param id 店仓档案ID
     * @return 店仓档案
     */
    @Override
    public SysStore selectSysStoreById(Long id)
    {
        return storeMapper.selectSysStoreById(id);
    }

    /**
     * 查询店仓档案列表
     * 
     * @param sysStore 店仓档案
     * @return 店仓档案
     */
    @Override
    public List<SysStore> selectSysStoreList(SysStore sysStore)
    {
        return storeMapper.selectSysStoreList(sysStore);
    }

    /**
     * 新增店仓档案
     * 
     * @param sysStore 店仓档案
     * @return 结果
     */
    @Override
    public int insertSysStore(SysStore sysStore)
    {
        return storeMapper.insertSysStore(sysStore);
    }

    /**
     * 修改店仓档案
     * 
     * @param sysStore 店仓档案
     * @return 结果
     */
    @Override
    public int updateSysStore(SysStore sysStore)
    {
        return storeMapper.updateSysStore(sysStore);
    }

    /**
     * 批量删除店仓档案
     * 
     * @param ids 需要删除的店仓档案ID
     * @return 结果
     */
    @Override
    public int deleteSysStoreByIds(Long[] ids)
    {
        return storeMapper.deleteSysStoreByIds(ids);
    }

    /**
     * 删除店仓档案信息
     * 
     * @param id 店仓档案ID
     * @return 结果
     */
    @Override
    public int deleteSysStoreById(Long id)
    {
        return storeMapper.deleteSysStoreById(id);
    }

    @Override
    public List<StoreVo> selectSysStoreByRoleId(Long roleId) {
        List<SysRoleStore> roleStores = roleStoreMapper.selectStoreVoByRoleId(roleId);
        List<StoreVo> storeVos=sysRoleStoreToStoreVo(roleStores);
        return storeVos;
    }

    @Override
    public List<StoreVo> selectSysStoreByUserId(Long userId) {
        List<SysUserStore> userStores = userStoreMapper.selectStoreVoByUserId(userId);
        List<StoreVo> storeVos=sysUserStoreToStoreVo(userStores);
        return storeVos;
    }

    /**
     * List<SysUserStore>转换成List<StoreVo>类型
     * @param userStores
     * @return
     */
    private List<StoreVo> sysUserStoreToStoreVo(List<SysUserStore> userStores) {
        List<StoreVo> storeVoList=null;
        if (userStores.size() > 0) {
            Set<Long> storeVoSet = new HashSet<Long>();
            for (SysUserStore userStore : userStores) {
                storeVoSet.add(userStore.getCCustomerId());
            }
            if (storeVoSet.size() > 0) {
                storeVoList = new ArrayList<StoreVo>();
                for (Long customerId : storeVoSet) {
                    StoreVo storeVo = new StoreVo();
                    storeVo.setId(customerId);
                    List<Long> list = new ArrayList<Long>();
                    for (SysUserStore userStore : userStores) {
                        if (customerId.equals(userStore.getCCustomerId())) {
                            list.add(userStore.getCStoreId());
                        }
                    }
                    storeVo.setStoreIds(list);
                    storeVoList.add(storeVo);
                }
            }
        }
        return storeVoList;
    }

    /**
     * List<SysRoleStore>转换成List<StoreVo>类型
     * @param roleStores
     * @return
     */
    private List<StoreVo> sysRoleStoreToStoreVo(List<SysRoleStore> roleStores) {
        List<StoreVo> storeVoList=null;
        if (roleStores.size() > 0) {
            Set<Long> storeVoSet = new HashSet<Long>();
            for (SysRoleStore roleStore:roleStores) {
                storeVoSet.add(roleStore.getCCustomerId());
            }
            if (storeVoSet.size() > 0) {
                storeVoList= new ArrayList<StoreVo>();
                for (Long customerId:storeVoSet) {
                    StoreVo storeVo=new StoreVo();
                    storeVo.setId(customerId);
                    List<Long> list=new ArrayList<Long>();
                    for (SysRoleStore roleStore:roleStores) {
                        if (customerId.equals(roleStore.getCCustomerId())) {
                            list.add(roleStore.getCStoreId());
                        }
                    }
                    storeVo.setStoreIds(list);
                    storeVoList.add(storeVo);
                }
            }
        }
        return storeVoList;
    }

}
